package com.huaxin.hxmoduleworkorder.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huaxin.hxmoduleworkorder.dto.ResponseResult;
import com.huaxin.hxmoduleworkorder.dto.request.InspectionOrderCreateReqDTO;
import com.huaxin.hxmoduleworkorder.dto.request.InspectionOrderPageListReqDTO;
import com.huaxin.hxmoduleworkorder.dto.request.InspectionOrderUpdateReqDTO;
import com.huaxin.hxmoduleworkorder.models.InspectionOrder;

import java.util.List;
import java.util.Map;

/**
 * 巡查工单服务接口
 * <p>
 * 提供对巡查工单的增删改查及业务操作，支持按工单编号、电工ID等查询。
 * </p>
 *
 * @author fuai
 * @since 2025-09-02
 */
public interface InspectionOrderService extends IService<InspectionOrder> {
    /**
     * 创建巡查任务
     *
     * @param in
     * @return
     */
    ResponseResult<InspectionOrder> create(InspectionOrderCreateReqDTO in);

    /**
     * 获取巡查任务
     *
     * @param id
     * @return
     */
    ResponseResult<InspectionOrder> get(String id);

    /**
     * 修改巡查任务
     *
     * @param in
     * @return
     */
    ResponseResult<String> update(InspectionOrderUpdateReqDTO in);

    /**
     * 列表巡查任务列表
     *
     * @param in
     * @return
     */
    ResponseResult<Page<InspectionOrder>> pageList(InspectionOrderPageListReqDTO in);

    /**
     * 删除巡查任务
     *
     * @param id
     * @return
     */
    ResponseResult<String> delete(String id);

    /**
     * 查询巡查任务是否存在
     *
     * @param id
     * @return
     */
    ResponseResult<Boolean> exist(String id);

    /**
     * 取消巡查任务
     *
     * @param id
     * @return
     */
    ResponseResult<Boolean> cancel(String id);

    /**
     * 查询每个配电房关联的巡检项数量
     *
     * @param roomIds
     * @return
     */
    ResponseResult<List<Map<String, Object>>> countItemsByRoomIds(List<String> roomIds, String inspectionOrderId);

    /**
     * 创建巡查任务
     *
     * @param frequency
     */
    void createInspectionOrders(String frequency, String templateId);

    //根据企业id查询巡检工单
    ResponseResult<List<InspectionOrder>> queryInspectionOrderByOrgId(String orgId);

    //根据客户id查询巡检工单数量
    ResponseResult<Long> queryInspectionOrderCountByCustomerId(String orgId);
}